package com.xbongbong.sys.model;

import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.sys.domain.entity.RoleEntity;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author kaka
 * @time 2018-8-24 11:06
 */
public interface RoleModel extends IModel<RoleEntity> {

    /**
     * 新建角色
     * @param entity 新建的角色
     * @return 返回是否产生数据
     */
    @Override
    Integer insert(RoleEntity entity);

    /**
     * 更新角色
     * @param entity 更新的角色
     * @return 是否有数据被更新，有则为>= 1， 无则为0
     */
    @Override
    Integer update(RoleEntity entity);

    /**
     * 获取id 对应的角色实体，
     * 可能是corpid = #{corpid} 的本公司角色，也可能是corpid = '0' 的系统角色
     * @param id 需要查询的roleId
     * @param corpid 公司id
     * @return id对应的角色实体
     */
    RoleEntity getByKey(Integer id, String corpid);

    /**
     * 查询角色列表
     * corpid = #{param.corpid} + corpid = 0
     * @param param 查询条件
     * @return 符合条件的角色列表
     */
    @Override
    List<RoleEntity> findEntitys(Map<String, Object> param);

    /**
     * 获取符合条件的角色数
     * @param param 查询条件
     * @return 符合条件的角色数
     */
    @Override
    Integer getEntitysCount(Map<String, Object> param);

    /**
     * 获取某个公司自定义的角色数
     * 即判断 corpid = #{corpid} AND del = 0
     * @param corpid 公司id
     * @return 该公司自定义的角色数
     */
    Integer getCorpRoleCount(String corpid);

    /**
     * 通过 roleId 集合获取角色列表
     * @param corpid 公司id
     * @param roleIdIn 角色id集合
     * @return 符合条件的角色列表
     */
    List<RoleEntity> getByRoleIdIn(String corpid, Collection<Integer> roleIdIn);

    /**
     *
     * 通过 roleId 集合获取角色列表
     * @param corpid 公司id
     * @param roleIdIn 角色id集合
     * @param showPaasPermission 是否回显paasPermission
     * @return 符合条件的角色列表
     */
    List<RoleEntity> getByRoleIdIn(String corpid, Collection<Integer> roleIdIn, boolean showPaasPermission);

    /**
     * 删除 id 对应的角色
     * @param id 需要删除的角色id
     * @param corpid 公司id
     * @return 删除命中的行数
     */
    Integer deleteByKey(Integer id, String corpid);

    void updateBatch(List<RoleEntity> roleEntityList, String corpid);

    void updateBatchPermissions(List<RoleEntity> roleEntityList, String corpid);

    void updateRoleName(Integer id,String corpid, String roleName);

    List<RoleEntity> findAllRoleByCorpid(Map<String, Object> param);

    /**
     * 获取该表中的最大id，用于资金三期数据迁移
     *
     * @param param
     * @return
     */
    Long getMaxId(Map<String, Object> param);

    /**
     * 批量更新角色表,用于资金三期脚本迁移
     *
     * @param updateList
     */
    void updateBatchAll(List<RoleEntity> updateList);

    /**
     * 批量追加权限
     * @param appendRole
     * @param existRole
     * @param corpidList
     */
    void batchAppendPermissions(String appendRole,String existRole,List<String> corpidList);
}
